// 引入Express框架，用于构建Web应用程序
const express = require('express');
// 引入cors中间件
const cors = require('cors');
// 创建Express应用实例
const app = express();
// 使用cors中间件，允许来自前端开发服务器的跨域请求
app.use(cors({ origin: 'http://localhost:5173' }));
// 引入HTTP模块，用于创建HTTP服务器
const http = require('http').createServer(app);
// 引入Socket.IO，用于实时通信
const io = require('socket.io')(http, {
  cors: {
    origin: '*',
    methods: ['GET', 'POST']
  }
});
// 引入SQLite3数据库模块，用于与SQLite数据库进行交互
const sqlite3 = require('sqlite3').verbose();
// 引入Multer，用于处理文件上传
const multer = require('multer');
// 引入xlsx模块，用于处理Excel文件
const xlsx = require('xlsx');
// 配置Multer，指定文件上传的目标目录
const upload = multer({ dest: 'uploads/' });
// 引入文件系统模块，用于文件操作
const fs = require('fs');
const { db, initializeDatabase } = require('./db/database');

// 添加静态文件中间件
app.use(express.static(__dirname));

// 添加根路径路由，返回一个简单的欢迎信息
app.get('/', (req, res) => {
  res.send('在线测试系统后端服务已启动');
});

// 题目管理API

// 重构后的题目添加接口
app.post('/api/questions', express.json(), (req, res) => {
  const { type, content, answer, options } = req.body;
  
  // 新增字段验证
  if (!type || !content || !answer) {
    return res.status(400).json({ error: '缺少必填字段' });
  }
  
  // 新增字段校验逻辑
  if (type === 'multiple' && (!options || options.length < 2)) {
    return res.status(400).json({ error: '选择题至少需要两个选项' });
  }
  
  // 强化错误处理
  db.serialize(() => {
    db.run("DELETE FROM answers WHERE question_id = ?", [questionId]);
    db.run("DELETE FROM questions WHERE id = ?", [questionId], function(err) {
      if (err) return handleDbError(res, err, '删除题目失败');
      res.json({ success: true });
    });
  });
});

// 基础数据查询接口
app.get('/api/questions', (req, res) => {
  db.all("SELECT id, content FROM questions", [], (err, rows) => {
    if (err) {
      console.error('查询失败：', err.message);
      return res.status(500).json({ error: '查询失败' });
    }
    res.json(rows || []);
  });
});

// 获取完整题目列表
app.get('/api/questions', (req, res) => {
  db.all(`SELECT 
      id,
      type,
      content,
      answer,
      options 
    FROM questions`, [], (err, rows) => {
    if (err) return handleDbError(res, err, '获取题目失败');
    res.json(rows.map(q => ({
      ...q,
      options: q.options ? JSON.parse(q.options) : null
    })));
  });
});

// 获取题目统计 - 前端请求处理
app.get('/api/questions/:id/stats', (req, res) => {
  const questionId = req.params.id;
  
  // 数据库操作 - 统计题目答案
  db.all("SELECT answer, COUNT(*) as count FROM answers WHERE question_id = ? GROUP BY answer",
    [questionId], (err, rows) => {
      if (err) return handleDbError(res, err, '获取统计失败');
      res.json(rows);
  });
});

// 删除题目 - 前端请求处理
app.delete('/api/questions/:id', (req, res) => {
  const questionId = req.params.id;
  
  // 数据库操作 - 删除指定题目
  db.run("DELETE FROM questions WHERE id = ?", [questionId], function(err) {
    if (err) return handleDbError(res, err, '删除题目失败');
    res.json({ success: true });
  });
});

// 获取学生列表 - 前端请求处理
app.get('/api/students', (req, res) => {
  db.all('SELECT id, name, student_id FROM students', [], (err, rows) => {
    if (err) return handleDbError(res, err, '获取学生失败');
    res.json(rows.map(r => ({
      id: r.id,
      name: r.name,
      studentId: r.student_id
    })));
  });
});

// 数据库初始化
initializeDatabase();

// 数据库错误处理函数
function handleDbError(res, err, message) {
  console.error(`${message}:`, err);
  return res.status(500).json({ error: message });
}

// Socket.IO实时通信处理
// 题目状态跟踪
let currentQuestionId = null;
let isPublished = false;

io.on('connection', (socket) => {
  console.log('新用户连接');
  
  

  // 初始化连接时发送当前题目状态
  socket.emit('questionStatus', { 
    currentQuestionId,
    isPublished 
  });

  
  socket.on('disconnect', () => {
    console.log('用户断开连接');
  });
});

// 学生数据导入 - 前端请求处理
app.post('/api/students/import', upload.single('file'), (req, res) => {
  try {
    // 文件处理 - 读取Excel数据
    const workbook = xlsx.readFile(req.file.path);
    const firstSheet = workbook.Sheets[workbook.SheetNames[0]];
    const jsonData = xlsx.utils.sheet_to_json(firstSheet);
    
    // 数据库操作 - 批量导入学生数据
    const stmt = db.prepare("INSERT OR REPLACE INTO students (name, student_id) VALUES (?, ?)");
    jsonData.forEach(row => {
      stmt.run([row.Name, row.StudentID]);
    });
    stmt.finalize();
    
    // 清理临时文件
    fs.unlinkSync(req.file.path);
    res.json({ success: true, data: jsonData });
  } catch (error) {
    console.error('学生数据导入失败:', error);
    res.status(500).json({ error: '导入失败' });
  }
});


// 启动服务器
const PORT = process.env.PORT || 3000;
http.listen(PORT, () => {
  console.log(`Server running on port ${PORT}`);
});


// 路由模块引入
const studentRoutes = require('./routes/studentRoutes');
app.use('/api/student', studentRoutes);

// 移除原有的数据库初始化代码（已迁移至db/database.js）

// 添加学生接口
app.post('/api/students', express.json(), (req, res) => {
  const { name, studentId } = req.body;
  db.run("INSERT INTO students (name, student_id) VALUES (?, ?)", [name, studentId], function(err) {
    if (err) return handleDbError(res, err, '添加学生失败');
    res.json({ id: this.lastID, name, student_id: studentId });
  });
});

// 修改获取学生接口
// 增强学生查询接口
app.get('/api/students', (req, res) => {
  db.all(`SELECT 
    id, 
    name AS fullName,
    student_id AS studentId 
    FROM students 
    ORDER BY student_id ASC`, 
  (err, rows) => {
    if (err) return handleDbError(res, err, '获取学生失败');
    res.json(rows);
  });
});

// 删除以下残留配置
